import { createRouter, createWebHistory } from 'vue-router'
import { useAuthStore } from '@/stores/auth'
import { ElMessage } from 'element-plus'

const router = createRouter({
  history: createWebHistory(import.meta.env.BASE_URL),
  routes: [
    {
      path: '/',
      redirect: '/login'
    },
    {
      path: '/login',
      name: 'login',
      component: () => import('@/views/LoginView.vue'),
      meta: { requiresAuth: false }
    },
    {
      path: '/register',
      name: 'register',
      component: () => import('@/views/RegisterView.vue'),
      meta: { requiresAuth: false }
    },
    {
      path: '/main',
      name: 'main',
      component: () => import('@/views/MainView.vue'),
      meta: { requiresAuth: true },
      children: [
        {
          path: 'chat',
          name: 'chat',
          component: () => import('@/views/ChatView.vue'),
          meta: { requiresAuth: true }
        },
        {
          path: 'knowledge',
          name: 'knowledge',
          component: () => import('@/views/KnowledgeView.vue'),
          meta: { requiresAuth: true }
        },
        {
          path: 'upload',
          name: 'upload',
          component: () => import('@/views/UploadView.vue'),
          meta: { requiresAuth: true }
        }
      ]
    }
  ]
})

/**
 * 全局前置守卫
 * 在每次路由跳转前检查用户认证状态
 */
router.beforeEach((to, from, next) => {
  const authStore = useAuthStore()
  
  // 检查目标路由是否需要认证
  const requiresAuth = to.matched.some(record => record.meta.requiresAuth)
  
  if (requiresAuth) {
    // 需要认证的页面
    if (!authStore.isAuthenticated) {
      // 用户未登录，重定向到登录页
      ElMessage.warning('请先登录')
      next({
        path: '/login',
        query: { redirect: to.fullPath } // 保存原始目标路径
      })
      return
    }
  } else {
    // 不需要认证的页面（登录、注册）
    if (authStore.isAuthenticated && (to.path === '/login' || to.path === '/register')) {
      // 已登录用户访问登录或注册页面，重定向到主页
      next('/main/chat')
      return
    }
  }
  
  // 继续路由跳转
  next()
})

/**
 * 路由守卫 - 全局后置钩子
 * 路由跳转完成后的处理
 */
router.afterEach((to, from) => {
  // 可以在这里添加页面访问日志、页面标题设置等
  document.title = getPageTitle(to.name)
})

/**
 * 根据路由名称获取页面标题
 * @param {string} routeName - 路由名称
 * @returns {string} - 页面标题
 */
function getPageTitle(routeName) {
  const titleMap = {
    'login': '登录 - MyAI',
    'register': '注册 - MyAI',
    'chat': '智能对话 - MyAI',
    'knowledge': '知识库 - MyAI',
    'upload': '文件上传 - MyAI',
    'main': 'MyAI'
  }
  
  return titleMap[routeName] || 'MyAI'
}

export default router